﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1.Autenticado.Administrador
{
    public partial class Default : System.Web.UI.Page
    {
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#addModal').modal('show');");
            sb.Append(@"</script>");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "AddShowModalScript", sb.ToString(), false);
        }

        protected void btnAddRecord_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = string.Empty;
            try
            {
                Entidades.Paciente p = new Entidades.Paciente();
                p.Nombre = txtNombreAdd.Text;
                p.Apellido = txtApellidoAdd.Text;
                p.FechaNac = DateTime.ParseExact(FechaNacAdd.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentCulture);
                p.Email = EmailAdd.Value;
                p.Domicilio = DomicilioAdd.Value;
                p.Telefono = TelefonoAdd.Value;
                BL.Pacientes.Agregar(p);
                MensajeLabel.Text = "Se agregó con éxito el registro";
                txtNombreAdd.Text = string.Empty;
                txtApellidoAdd.Text = string.Empty;
                FechaNacAdd.Value = string.Empty;
                EmailAdd.Value = string.Empty;
                DomicilioAdd.Value = string.Empty;
                TelefonoAdd.Value = string.Empty;
            }
            catch (Exception ex)
            {
                MensajeLabel.Text = string.Format("No se pudo agregar el registro ({0})", ex.Message.Replace("\\r\\n", string.Empty));
            }
            ActualizarGrilla();
            MostrarMensaje();
        }

        protected void btnAddChildRecord_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = string.Empty;
            try
            {
                Entidades.Tratamiento t = new Entidades.Tratamiento();
                t.IdPaciente = Convert.ToUInt32(lblIdMaster.Text);
                t.Fecha = DateTime.ParseExact(FechaChildTextBoxAdd.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentCulture);
                t.Pieza = PiezaTextBoxAdd.Value;
                t.Descripcion = DescrTextBoxAdd.Text;
                BL.Tratamientos.Agregar(t);
                MensajeLabel.Text = "Se agregó con éxito el registro";
                lblIdMaster.Text = string.Empty;
                FechaChildTextBoxAdd.Value = string.Empty;
                PiezaTextBoxAdd.Value = string.Empty;
                DescrTextBoxAdd.Text = string.Empty;
            }
            catch (Exception ex)
            {
                MensajeLabel.Text = string.Format("No se pudo agregar el registro ({0})", ex.Message.Replace("\\r\\n", string.Empty));
            }
            ActualizarGrilla();
            MostrarMensaje();
        }

        private void MostrarMensaje()
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#mensajeModal').modal('show');");
            sb.Append(@"</script>");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "delHideModalScript", sb.ToString(), false);
        }

        protected void btnDelete_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = string.Empty;
            try
            {
                Entidades.Paciente p = new Entidades.Paciente();
                p.Id = Convert.ToUInt32(HfDeleteID.Value);
                BL.Pacientes.Eliminar(p);
                MensajeLabel.Text = "Se eliminó con éxito el registro";
            }
            catch (Exception ex)
            {
                MensajeLabel.Text = string.Format("No se pudo eliminar el registro({0})", ex.Message);
            }

            ActualizarGrilla();
            MostrarMensaje();
        }

        protected void btnChildDelete_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = string.Empty;
            try
            {
                Entidades.Tratamiento t = new Entidades.Tratamiento();
                t.IdPaciente = Convert.ToUInt32(HfChildDeleteID.Value);
                t.Fecha = DateTime.ParseExact(HfChildDeleteFecha.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentCulture);
                BL.Tratamientos.Eliminar(t);
                MensajeLabel.Text = "Se eliminó con éxito el registro";
            }
            catch (Exception ex)
            {
                MensajeLabel.Text = string.Format("No se pudo eliminar el registro({0})", ex.Message);
            }

            ActualizarGrilla();
            MostrarMensaje();
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = string.Empty;
            try
            {
                Entidades.Paciente p = new Entidades.Paciente();
                p.Id = Convert.ToUInt32(lblIdUpdate.Text);
                p.Nombre = txtNombreUpdate.Text;
                p.Apellido = txtApellidoUpdate.Text;
                p.FechaNac = DateTime.ParseExact(FechaNacUpdate.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentCulture);
                p.Email = EmailUpdate.Value;
                p.Domicilio = DomicilioUpdate.Value;
                p.Telefono = TelefonoUpdate.Value;
                BL.Pacientes.Modificar(p);
                MensajeLabel.Text = "Se modificó con éxito el registro";
            }
            catch (Exception ex)
            {
                MensajeLabel.Text = string.Format("No se pudo modificar el registro({0})", ex.Message);
            }
            ActualizarGrilla();
            MostrarMensaje();
        }

        protected void BuscarButton_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = string.Empty;
            try
            {
                ActualizarGrilla();
            }
            catch (Exception ex)
            {
                MensajeLabel.Text = string.Format("No se pudo buscar el registro({0})", ex.Message);
            }
        }

        protected void BuscarTratamientosButton_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = string.Empty;
            try
            {
                ActualizarGrilla();
            }
            catch (Exception ex)
            {
                MensajeLabel.Text = string.Format("No se pudo buscar el registro({0})", ex.Message);
            }
        }

        protected void btnSaveChild_Click(object sender, EventArgs e)
        {
            MensajeLabel.Text = string.Empty;
            try
            {
                Entidades.Tratamiento t = new Entidades.Tratamiento();
                t.IdPaciente = Convert.ToUInt32(IdPacienteUpdateLabel.Text);
                t.Pieza = PiezaTextBoxUpdate.Value;
                t.Descripcion = DescrUpdateTextBox.Text;
                t.Fecha = DateTime.ParseExact(FechaChildTextBoxEdit.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentCulture);
                DL.Tratamientos db = new DL.Tratamientos();
                db.Modificar(t);
                MensajeLabel.Text = "Se modificó con éxito el registro";
            }
            catch (Exception ex)
            {
                MensajeLabel.Text = string.Format("No se pudo modificar el registro({0})", ex.Message);
            }
            ActualizarGrilla();
            MostrarMensaje();
        }

        protected void PacientesGridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int index = 0;
            if (!e.CommandArgument.Equals(string.Empty))
            {
                try
                {
                    index = Convert.ToInt32(e.CommandArgument);
                }
                catch { }
            }

            if (e.CommandName.Equals("deleteRecord"))
            {
                string code = PacientesGridView.DataKeys[index].Value.ToString();
                HfDeleteID.Value = code;
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append(@"<script type='text/javascript'>");
                sb.Append("$('#deleteModal').modal('show');");
                sb.Append(@"</script>");
                ScriptManager.RegisterStartupScript(this, this.GetType(), "DeleteModalScript", sb.ToString(), false);
            }
            if (e.CommandName.Equals("editRecord"))
            {
                List<Entidades.Paciente> pacientes = (List<Entidades.Paciente>)Session["Pacientes"];
                lblIdUpdate.Text = Convert.ToString(pacientes[index].Id);
                txtNombreUpdate.Text = pacientes[index].Nombre;
                txtApellidoUpdate.Text = pacientes[index].Apellido;
                FechaNacUpdate.Value = pacientes[index].FechaNac.ToString("dd/MM/yyyy");
                EmailUpdate.Value = pacientes[index].Email;
                DomicilioUpdate.Value = pacientes[index].Domicilio;
                TelefonoUpdate.Value = pacientes[index].Telefono;
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append(@"<script type='text/javascript'>");
                sb.Append("$('#editModal').modal('show');");
                sb.Append(@"</script>");
                ScriptManager.RegisterStartupScript(this, this.GetType(), "EditModalScript", sb.ToString(), false);
            }
            if (e.CommandName.Equals("addChildRecord"))
            {
                GridViewRow gvrow = PacientesGridView.Rows[index];
                lblIdMaster.Text = HttpUtility.HtmlDecode(gvrow.Cells[1].Text);
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append(@"<script type='text/javascript'>");
                sb.Append("$('#addChildModal').modal('show');");
                sb.Append(@"</script>");
                ScriptManager.RegisterStartupScript(this, this.GetType(), "EditModalScript", sb.ToString(), false);
            }
        }

        protected void TratamientosGridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int index = 0;
            if (!e.CommandArgument.Equals(string.Empty))
            {
                index = Convert.ToInt32(e.CommandArgument);
            }

            if (e.CommandName.Equals("deleteChildRecord"))
            {
                GridView tratamientosClienteGridView = (GridView)sender;
                string code = tratamientosClienteGridView.DataKeys[index].Value.ToString();
                string fecha = tratamientosClienteGridView.Rows[index].Cells[1].Text;
                HfChildDeleteID.Value = code;
                HfChildDeleteFecha.Value = fecha;
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append(@"<script type='text/javascript'>");
                sb.Append("$('#deleteChildModal').modal('show');");
                sb.Append(@"</script>");
                ScriptManager.RegisterStartupScript(this, this.GetType(), "DeleteModalScript", sb.ToString(), false);
            }
            if (e.CommandName.Equals("editChildRecord"))
            {
                GridView tratamientosClienteGridView = (GridView)sender;
                string code = tratamientosClienteGridView.DataKeys[index].Value.ToString();
                string fecha = tratamientosClienteGridView.Rows[index].Cells[1].Text;

                IdPacienteUpdateLabel.Text = code;
                FechaChildTextBoxEdit.Value = fecha;
                PiezaTextBoxUpdate.Value = Convert.ToUInt32(tratamientosClienteGridView.Rows[index].Cells[2].Text).ToString("00");
                DescrUpdateTextBox.Text = ((TextBox)tratamientosClienteGridView.Rows[index].Cells[3].FindControl("descrTratamientoTextBox")).Text;

                GenerarLinksAImagenes(code, fecha);

                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append(@"<script type='text/javascript'>");
                sb.Append("$('#editChildModal').modal('show');");
                sb.Append(@"</script>");
                ScriptManager.RegisterStartupScript(this, this.GetType(), "EditModalScript", sb.ToString(), false);
            }
        }

        private void GenerarLinksAImagenes(string code, string fecha)
        {
            DateTime f = DateTime.ParseExact(fecha, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
            string path = Server.MapPath("~\\Imagenes\\") + code + "\\" + f.ToString("yyyyMMdd");
            try
            {
                string[] archivos = System.IO.Directory.GetFiles(path);

                System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(path);
                ImagenesLiteral.Text = "<ul id=\"ImagenesSubidas\">";
                foreach (System.IO.FileInfo objFile in directory.GetFiles("*.*"))
                {
                    ImagenesLiteral.Text += string.Format("<li><a href=\"../../Imagenes/{1}\">{0}</a></li>", objFile.Name, code + "/" + f.ToString("yyyyMMdd") + "/" + objFile.Name);
                }
                ImagenesLiteral.Text += "</ul>";
            }
            catch (System.IO.DirectoryNotFoundException)
            {
            }
        }

        [WebMethod]
        public static string ActualizarArchivos(string code, string fecha)
        {
            DateTime f = DateTime.ParseExact(fecha, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
            string path = System.Web.HttpContext.Current.Server.MapPath("~\\Imagenes\\") + code + "\\" + f.ToString("yyyyMMdd");
            try
            {
                string[] archivos = System.IO.Directory.GetFiles(path);

                System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(path);
                string aux = "<ul id=\"ImagenesSubidas\">";
                foreach (System.IO.FileInfo objFile in directory.GetFiles("*.*"))
                {
                    aux += string.Format("<li><a href=\"../../Imagenes/{1}\">{0}</a></li>", objFile.Name, code + "/" + f.ToString("yyyyMMdd") + "/" + objFile.Name);
                }
                aux += "</ul>";
                return aux;
            }
            catch (System.IO.DirectoryNotFoundException)
            {
            }
            return string.Empty;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ActualizarGrilla();
            }
            this.Page.Form.DefaultButton = BuscarButton.UniqueID;
        }

        private void ActualizarGrilla()
        {
            DL.Pacientes db = new DL.Pacientes();
            List<Entidades.Paciente> pacientes;
            if (filtroPacientes.Value.Equals(string.Empty))
            {
                pacientes = db.Lista;
                PacientesGridView.VirtualItemCount = db.Cantidad;
            }
            else
            {
                pacientes = db.ListaFiltrada(filtroPacientes.Value);
                PacientesGridView.VirtualItemCount = db.CantidadFiltrada(filtroPacientes.Value);
            }
            PacientesGridView.DataSource = pacientes;
            Session["Pacientes"] = pacientes;
            PacientesGridView.DataBind();
        }

        protected void PacientesGridView_OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string customerID = PacientesGridView.DataKeys[e.Row.RowIndex].Value.ToString();
                GridView tratamientosClienteGridView = (GridView)e.Row.FindControl("TratamientosGridView");

                DL.Tratamientos db = new DL.Tratamientos();
                Entidades.Paciente paciente = new Entidades.Paciente();
                paciente.Id = Convert.ToUInt32(customerID);
                List<Entidades.Tratamiento> tratamientos = db.ListaFiltradaXTratamientos(paciente, filtroTratamientos.Value);
                tratamientosClienteGridView.DataSource = tratamientos;
                tratamientosClienteGridView.DataBind();
            }
        }

        protected void PacientesGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            int i = e.NewPageIndex;
            PacientesGridView.PageIndex = i;
            ActualizarGrilla(i, PacientesGridView.PageSize);
        }

        private void ActualizarGrilla(int pageindex, int pageSize)
        {
            DL.Pacientes db = new DL.Pacientes();
            List<Entidades.Paciente> pacientes;
            if (filtroPacientes.Value.Equals(string.Empty))
            {
                pacientes = db.ListaFiltrada(string.Empty, pageindex, pageSize);
                PacientesGridView.VirtualItemCount = db.Cantidad;
            }
            else
            {
                pacientes = db.ListaFiltrada(filtroPacientes.Value, pageindex, pageSize);
                PacientesGridView.VirtualItemCount = db.CantidadFiltrada(filtroPacientes.Value);
            }
            PacientesGridView.DataSource = pacientes;
            Session["Pacientes"] = pacientes;
            PacientesGridView.DataBind();
        }

        protected string EmptyText()
        {
            return string.Format("Sin registros - (Filtro pacientes ('{0}') - Filtro tratamientos ('{1}'))", filtroPacientes.Value, filtroTratamientos.Value);
        }
    }
}